package com.hr.runnerbuddy.parcour;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Timer;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.Cursor;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Criteria;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.PowerManager;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;
import com.hr.runnerbuddy.database.DBAdapter;

public class Parcour extends MapActivity implements OnInitListener, OnSharedPreferenceChangeListener{
	/** Called when the activity is first created. */

	 private MapController mapController;
	    private LocationManager lm;
	    public LocationListener locationListener;
	    public int mintime_save;
	    public int mindistance_save;
	    public boolean todb_save;
	    private static final String PREFS_NAME = "savesettings";
	    private SharedPreferences settings;
	    private PowerManager.WakeLock wl;
	    private GPSListener gpsListener;
	    private DBAdapter dbHelper;
	    private Maperror maperror;
	    private Dialog dialog;
	    protected Cursor cursor=null;
	    private MapView mapView;
	    private double latitude1 = 4.346492886543274;
	    private double longitude1 = 51.826152205467224;
	    private double latitude2;
	    private double longitude2;
	    private double latitude_last;
	    private double longitude_last;
	    
	    private List<Loopsessiepunt> loopsessiepunten = new ArrayList<Loopsessiepunt>();	    
	    private Projection projection; 	    
	    private double[] huidigelocatie;	    
	    private Button pauzeknopMain;
	    private Button stopknopMain;
	    private Button pauzeknoppauze;
	    private boolean pauzestatus = true;
	    private int parcourId=1;
	    private double parcourlengte;
	    private String parcournaam;	
	    private String parcourkeuzegemsnelheid;	
	    private String parcourkeuzemaxlooptijd;	
		private TextView mapsparcournaam;
		private TextView mapsafgelegdeafstand;
		private TextView mapsverstrekentijd;
		private TextView mapshuidigesnelheid;
		private int beginpuntId;
		
		private int mapsize;

	private TextToSpeech mTts;
	private int MY_DATA_CHECK_CODE = 1234;
	private String myText1 = "";
	private String myText2 = "";
	
	private List<Overlay> mapOverlaysList;
	
	private final int UPDATE_TIME = 1000;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
		dbHelper = new DBAdapter(this);
		dbHelper.open();

		PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
		wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen");
        
        maperror = new Maperror(this);
        
        // Restore preferences

        Bundle extras = getIntent().getExtras();
        
        if (extras != null) {
        	parcourlengte = extras.getDouble("parcourlengte");
        	parcourkeuzegemsnelheid = extras.getString("parcourkeuzegemsnelheid");
        	parcourkeuzemaxlooptijd = extras.getString("parcourkeuzemaxlooptijd");
        	parcournaam = extras.getString("parcournaam");
        	parcourlengte = extras.getDouble("parcourlengte");
        	//Toast.makeText(getApplicationContext(), parcourlengte+" / "+parcourkeuzegemsnelheid+" / "+parcourkeuzemaxlooptijd, Toast.LENGTH_SHORT).show();
        	//textViewParcourlengte.setText("Parcourlengte: "+extras.getString("parcourlengte")+" m");
        }
        
        mapsparcournaam = (TextView)findViewById(R.id.mapsparcournaam);
        mapsparcournaam.setText(parcournaam);
        
        mapsafgelegdeafstand = (TextView)findViewById(R.id.mapsafgelegdeafstand);
        mapsafgelegdeafstand.setText("0/"+parcourlengte+" m");
        
        mapsverstrekentijd = (TextView)findViewById(R.id.mapsverstrekentijd);
        mapsverstrekentijd.setText("00:00:00");
        
        mapshuidigesnelheid = (TextView)findViewById(R.id.mapshuidigesnelheid);
        mapshuidigesnelheid.setText("0 km/u");

        settings = getSharedPreferences(PREFS_NAME, 0);
        mintime_save = settings.getInt("mintime", 10);
        mindistance_save = settings.getInt("mindistance", 20);
        todb_save = settings.getBoolean("savetodb", false);
		
        Criteria criteria = new Criteria();
	    criteria.setAccuracy(Criteria.ACCURACY_FINE);
	    criteria.setAltitudeRequired(false);
	    criteria.setBearingRequired(false);
	    criteria.setCostAllowed(true);
	    criteria.setPowerRequirement(Criteria.ACCURACY_COARSE);
        
	    createDialog();
	    
	    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
	     Log.d("whoops", "voor location");
         if (lm.isProviderEnabled( LocationManager.GPS_PROVIDER )) {
  	     	if(lm.getBestProvider(criteria, true)!=null){
  	     		Log.d("whoops", "in location");
  	     		String provider = lm.getBestProvider(criteria, true);
  	     		locationListener = new MyLocationListener();
  	     		lm.requestLocationUpdates(provider, mintime_save*1000, mindistance_save, locationListener);
         	}
         }else{
        	 maperror.showMapError();
        	 maperror.setText("Er is geen verbinding met de GPS-satelliet.");
         }

		// lm.requestLocationUpdates(provider, 1000L, 10.0f, this);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

		mapView = (MapView) findViewById(R.id.mapview);
		mapView.setSatellite(true);
		mapView.setBuiltInZoomControls(true);
		mapView.displayZoomControls(true);

		mapController = mapView.getController();
		if (mapView.getZoomLevel() < 20) {
			mapController.setZoom(20);
		}

		gpsListener = new GPSListener();
		lm.addGpsStatusListener(gpsListener);
		
		pauzeknopMain = (Button) findViewById(R.id.pauzeknopmain);
        pauzeknopMain.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click.
            	// Restore preferences
            	pauzeknopMain.setEnabled(false);
    	    	mapView.setBuiltInZoomControls(false);
    	    	pauzestatus=true;
    	    	createDialog();
            }
        });
        
        stopknopMain = (Button) findViewById(R.id.stopknopmain);
        stopknopMain.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click.
            	Intent intent = new Intent(Parcour.this,Hoofdmenu.class);
        		startActivity(intent);
            }
        });
	}

	@Override
	protected void onResume() {
		super.onResume();
		wl.acquire();

		if(loopsessiepunten.size() == 0){
			mapOverlaysList = mapView.getOverlays();
			
			projection = mapView.getProjection();
			
	        Drawable drawable = this.getResources().getDrawable(R.drawable.maprouteitem);	        
	        KaartObjectLaag itemizedOverlay = new KaartObjectLaag(drawable, this);
	        
	        listGPSItems();
	        Log.w("whoops", "GPS objecten");
	        
	        for(int i=0; i<loopsessiepunten.size(); i++) {

	        	latitude1 = loopsessiepunten.get(i).getLatitude();
	        	longitude1 = loopsessiepunten.get(i).getLongitude();
	        	
	        	Log.w("whoops", "i: "+Integer.toString(i));
	        	
		        GeoPoint punt1 = new GeoPoint((int)(latitude1 * 1e6), (int)(longitude1 * 1e6));
		        
		        mapController.setCenter(punt1);
		        
		        OverlayItem overlayitem = new OverlayItem(punt1, "Info", "punt "+(i+1));
		        
		        if(longitude2 != 0 && latitude2 != 0){
		        	GeoPoint punt2 = new GeoPoint((int)(latitude2 * 1e6), (int)(longitude2 * 1e6));
		        	Log.w("whoops", "l: "+Double.toString(latitude2));
		        	// Pass the geopoints to the overlay class
		        	MapOverlayLines mapOvlay = new MapOverlayLines(punt1, punt2);
		        	mapView.getOverlays().add(mapOvlay);
		        	Log.w("whoops", "geen lon lat 2");
		        }
		        
		        itemizedOverlay.addOverlay(overlayitem);
		        mapOverlaysList.add(itemizedOverlay);
		        
		        mapsize = (int)mapOverlaysList.size();
		        
		        Log.w("whoops", "_____________________________________________________");

		        longitude2 = longitude1;
	        	latitude2 = latitude1;
	        	
	        	if(longitude_last == 0 && latitude_last == 0){
			        
	        		longitude_last = loopsessiepunten.get(loopsessiepunten.size()-1).getLongitude();
			        latitude_last = loopsessiepunten.get(loopsessiepunten.size()-1).getLatitude();
		        	
		        	Loopsessiepunt eindpunt = new Loopsessiepunt();
		        	eindpunt.id = 0;
		        	eindpunt.longitude = longitude_last;
		        	eindpunt.latitude = latitude_last;
		        	
		        	double[] beginpunt = new double[2];
		        	beginpunt[0] = (double) punt1.getLongitudeE6() / 1e6;
		        	beginpunt[1] = (double) punt1.getLatitudeE6() / 1e6;
		        	
		        	if(OpRoute.getPuntenAfstand(beginpunt, eindpunt) < 25){
				        GeoPoint point_last = new GeoPoint((int)(latitude_last * 1e6), (int)(longitude_last * 1e6));
	
		        		MapOverlayLines mapOvlay2 = new MapOverlayLines(point_last, punt1);
			        	mapView.getOverlays().add(mapOvlay2);
			        	
		        		longitude_last = longitude1;
		        		latitude_last = latitude1;
		        	}else{
		        		Log.w("whoops", "afstand: "+OpRoute.getPuntenAfstand(beginpunt, eindpunt));
		        	}
	        	}
	
	        }
	        
	        Log.w("whoops", "Overlay items: "+mapOverlaysList.size());
	        
    	}
		
		
//		
//		final long mStartTime = System.currentTimeMillis();
//		
//		 Handler threadHandler = new Handler() 
//		 {
//		     public void handleMessage(android.os.Message msg) 
//		     {
//		    	 final long start = mStartTime;
//			       long millis = System.currentTimeMillis() - start;
//			       int seconds = (int) (millis / 1000);
//			       int minutes = seconds / 60;
//			       seconds     = seconds % 60;
//
//			       if (seconds < 10) {
//			    	   
//			       }
//			       
//					if (seconds < 10) {
//								    	   
//								       }
//					
//					if (seconds < 10) {
//						   
//					}
//			       
//			       int hours = seconds / 3600;
//		    	   minutes = (seconds % 3600) / 60;
//		    	   seconds = seconds % 60;
//
//		    	   String timeString = hours + ":" + minutes + ":" + seconds;   
//		    	   
//		    	   mapsverstrekentijd.setText(timeString);
//		     }
//		 };
		 
		 

	}
//	
//	public void run()
//    {
//        try 
//        {
//         while(true)
//         {
//                Thread.sleep(1000);
//                Log.e("run", "run");
//                threadHandler.sendEmptyMessage(0);
//         }   
//        } 
//        catch (InterruptedException e) {}
//    }

	
	private void createDialog() {
		dialog = new Dialog(Parcour.this);
		dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialog.setContentView(R.layout.pauzeknop);
		dialog.setTitle("Pauze");
		dialog.setCancelable(false);
		dialog.show();
		getButtonDialog();
	}
	
	private void getButtonDialog() {
      pauzeknoppauze = (Button)dialog.findViewById(R.id.pauzeknopbutton);
      pauzeknoppauze.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
          	//Toast.makeText(_context, "test", Toast.LENGTH_SHORT).show();
              // Perform action on click
          	// Restore preferences
          	Log.d("vreemd", "message2 ");
          	pauzeknopMain.setEnabled(true);
          	pauzestatus=false;
          	dialog.dismiss();
  	    	mapView.setClickable(true);
  	    	mapView.setBuiltInZoomControls(true);
          } 
      });
	}
	/*
	private void mapErrorWIndow(String errormessage) {
		LinearLayout myLayout = (LinearLayout) findViewById(R.id.maperror);
		View maperrorview = getLayoutInflater().inflate(R.layout.mapalert,
				myLayout, false);
		myLayout.removeAllViewsInLayout();
		myLayout.addView(maperrorview);
	}
	*/
	private void listGPSItems() {
		/*
		 * //Rotterdam Loopsessiepunt nieuwpunt = new Loopsessiepunt();
		 * nieuwpunt.setId(1); nieuwpunt.setLatitude(51.907279885767515);
		 * nieuwpunt.setLongitude(4.460256099700928);
		 * loopsessiepunten.add(nieuwpunt);
		 * 
		 * 
		 * nieuwpunt = new Loopsessiepunt(); nieuwpunt.setId(2);
		 * nieuwpunt.setLatitude(51.90817343352416);
		 * nieuwpunt.setLongitude(4.45908665657043501);
		 * loopsessiepunten.add(nieuwpunt);
		 * 
		 * nieuwpunt = new Loopsessiepunt(); nieuwpunt.setId(3);
		 * nieuwpunt.setLatitude(51.90906698128081);
		 * nieuwpunt.setLongitude(4.45791721343994101);
		 * loopsessiepunten.add(nieuwpunt);
		 */

		 Loopsessiepunt nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(1);
		 nieuwpunt.setLatitude(51.907279885767515);
		 nieuwpunt.setLongitude(4.460256099700928);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(2);
		 nieuwpunt.setLatitude(51.90698864864919);
		 nieuwpunt.setLongitude(4.459354877471924);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(3);
		 nieuwpunt.setLatitude(51.90747845544727);
		 nieuwpunt.setLongitude(4.459011554718018);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(4);
		 nieuwpunt.setLatitude(51.90784911650056);
		 nieuwpunt.setLongitude(4.45871114730835);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(5);
		 nieuwpunt.setLatitude(51.908285963100546);
		 nieuwpunt.setLongitude(4.45845365524292);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(6);
		 nieuwpunt.setLatitude(51.90866985508979);
		 nieuwpunt.setLongitude(4.458217620849609);
		 loopsessiepunten.add(nieuwpunt);
		
		 nieuwpunt = new Loopsessiepunt();
		 nieuwpunt.setId(7);
		 nieuwpunt.setLatitude(51.90906698128081);
		 nieuwpunt.setLongitude(4.457917213439941);
		 loopsessiepunten.add(nieuwpunt);

	}

	private class GPSListener implements GpsStatus.Listener {
		public void onGpsStatusChanged(int event) {
			// Toast.makeText(getApplicationContext(),
			// "GPSListener implements GpsStatus.listener",
			// Toast.LENGTH_LONG).show();
			Log.i("MyGps", "Event");

			switch (event) {
			case GpsStatus.GPS_EVENT_STARTED:
				Log.i("MyGps", "Gestart");
				//Toast.makeText(getApplicationContext(), "GPSListener implements: Gestart", Toast.LENGTH_SHORT).show();
				maperror.hideMapError();
				break;
			case GpsStatus.GPS_EVENT_STOPPED:
				Log.i("MyGps", "Gestopt");
				//Toast.makeText(getApplicationContext(),"GPSListener implements: Gestopt", Toast.LENGTH_SHORT).show();
				maperror.showMapError();
				maperror.setText("Er is geen verbinding met de GPS-satelliet.");
				break;
			}
		}
	}

	@SuppressWarnings("rawtypes")
	public void navigateTo(Class c) {
		Intent intent = new Intent(Parcour.this, c);
		startActivity(intent);
	}
/*
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle item selection
		switch (item.getItemId()) {
		case R.id.settings:
			navigateTo(Settings.class);
			return true;
		case R.id.gpslist:
			navigateTo(GpsList.class);
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}*/
	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}

	@Override
	protected void onDestroy() {
		dbHelper.close();
		super.onDestroy();
	}

	private void dichtBijPunt(double[] gLocatie) {
		int punt = 0;
		double dichtBijPunt = 30;
		for (int i = 0; i < loopsessiepunten.size(); i++) {
			double gebruikerAfstand= OpRoute.getPuntenAfstand(gLocatie,
					loopsessiepunten.get(i));
			if (gebruikerAfstand < dichtBijPunt) {
				dichtBijPunt = gebruikerAfstand;
				punt = i;
			}
		}
		if(dichtBijPunt>29){
			maperror.showMapError();
			maperror.setText("You are to far away, try to get closer.");
			setTextToSpeak("You are to far away","try to get closer.");
		}
		beginpuntId=punt;
		OpRoute.i=punt;
	}

	/* Class My Location Listener */

	public class MyLocationListener implements LocationListener {

		public void onLocationChanged(Location loc) {
			// If location is not null do the following
			if (loc != null) {
				if(!pauzestatus){
				dbHelper.open();
				//Toast.makeText(getApplicationContext(),	"lo aan = " + loc.getLongitude() + " la aan= "+ loc.getLatitude(), Toast.LENGTH_LONG).show();
				Log.d("LOKATIE",
						"lo = " + loc.getLongitude() + " la= "
								+ loc.getLatitude());
				double mlongti = loc.getLongitude();
				double mlatiti = loc.getLatitude();

				huidigelocatie = new double[2];
				huidigelocatie[0] = mlongti;
				huidigelocatie[1] = mlatiti;
							
				mapOverlaysList = mapView.getOverlays();
				
				Drawable userdraw = getApplicationContext().getResources().getDrawable(R.drawable.mapusericon);	        
				KaartGebruikerLaag itemizedOverlayUser = new KaartGebruikerLaag(userdraw, getApplicationContext());
		        GeoPoint userpunt = new GeoPoint((int)(huidigelocatie[1] * 1e6), (int)(huidigelocatie[0] * 1e6));
		        
		        OverlayItem overlayitemuser = new OverlayItem(userpunt, "Positie", "ik");
		        
		        if(mapsize != (int)mapOverlaysList.size()){
		        	mapOverlaysList.remove(mapOverlaysList.size()-1);
		        }
		        
		        //Toast.makeText(getApplicationContext(), "new user location", Toast.LENGTH_SHORT).show();
		        
		        itemizedOverlayUser.addOverlay(overlayitemuser);
		        
		        mapOverlaysList.add(itemizedOverlayUser);

				if(OpRoute.i==-1){
					dichtBijPunt(huidigelocatie);
					//Toast.makeText(getApplicationContext(),"The closest point to you is point " + OpRoute.i,Toast.LENGTH_LONG).show();
				}
				dbHelper.addParcourPunten(parcourId, mlongti,mlatiti);

				// Als de gebruiker binnen de maximale afstand is van het punt
				// ga dan in de if en anders in de else
				if (OpRoute.isOpRoute(huidigelocatie, loopsessiepunten.get(OpRoute.i))) {
					Log.d("LOCATIE", "je loopt binnen de route i= " + OpRoute.i);
					//Toast.makeText(getApplicationContext(),	"You are walking inside the route i= " + OpRoute.i,	Toast.LENGTH_LONG).show();
					int afstand= (int) OpRoute.getPuntenAfstand(huidigelocatie, loopsessiepunten.get(beginpuntId));
					mapsafgelegdeafstand.setText(afstand+"/"+parcourlengte+" m");
				} else {
					// Als de loopsessie punten niet het laaste punt is
					if (OpRoute.i < loopsessiepunten.size()) {
						// Bij de if kijk je of de gebruiker binnen de afstand
						// van het virtuele punt is.
						if (OpRoute.isOpRoute(huidigelocatie,
								OpRoute.getInterpunten(loopsessiepunten))) {
							Log.d("LOCATIE",
									"Binnen route met een virtueel punt laatste punt= "
											+ OpRoute.i);
							int afstand= (int) OpRoute.getPuntenAfstand(huidigelocatie, loopsessiepunten.get(beginpuntId));
							mapsafgelegdeafstand.setText(afstand+"/"+parcourlengte+" m");
							//Toast.makeText(getApplicationContext(),"You are walking inside the route with the virtual point after the point= "+ OpRoute.i, Toast.LENGTH_LONG).show();
						} else {
							// Als de gebruiker niet meer bij het oude punt is
							// en niet in de buurt van het virtuele punt, kijk
							// dan of de gebruiker
							// al bij het volgende punt is. Door i op te hogen
							// kijk je naar het volgende punt als hij inderdaad
							// bij het volgende
							// punt is dan ga je in de komende if anders in de
							// else
							OpRoute.i++;
							if (OpRoute.isOpRoute(huidigelocatie,
									loopsessiepunten.get(OpRoute.i))) {
								Log.d("LOCATIE",
										"JE LOOPT binnen DE route met punt= "
												+ OpRoute.i);
								int afstand= (int) OpRoute.getPuntenAfstand(huidigelocatie, loopsessiepunten.get(beginpuntId));
								mapsafgelegdeafstand.setText(afstand+"/"+parcourlengte+" m");
//								Toast.makeText(getApplicationContext(),"You are walking inside the route with point= "+ OpRoute.i, Toast.LENGTH_LONG).show();
							} else {
								// De gebruiker is bij geen van de punten zet
								// i(het punt) weer op het punt waar de
								// gebruiker als laatst is gezien en vermeld
								// tegen de gebruiker dat hij buiten de route is
								// gaan lopen.
								OpRoute.i--;
//								Toast.makeText(
//										getApplicationContext(),
//										"JE LOOPT BUITEN DE LOKATIE i--= "
//												+ OpRoute.i, Toast.LENGTH_LONG)
//										.show();
								setTextToSpeak("You are to far away","try to get closer.");
							}
						}
					} else {
//						Toast.makeText(
//								getApplicationContext(),
//								"JE LOOPT BUITEN DE LOKATIE laatste punt i= "
//										+ OpRoute.i, Toast.LENGTH_LONG).show();
						setTextToSpeak("You are to far away","try to get closer.");
						Log.d("LOCATIE", "JE LOOPT BUITEN DE LOKATIE");
					}
				}

				GeoPoint userLoc = new GeoPoint((int) (mlatiti * 1E6),
						(int) (mlongti * 1E6));
				mapController.animateTo(userLoc);

				}
			} else {
//				Toast.makeText(getApplicationContext(), "locatie is null",
//						Toast.LENGTH_LONG).show();
			}
		}

		public void onProviderDisabled(String provider) {
//
//			Toast.makeText(getApplicationContext(), "Gps Disabled",
//					Toast.LENGTH_SHORT).show();

		}

		public void onProviderEnabled(String provider) {
//
//			Toast.makeText(getApplicationContext(), "Gps Enabled",
//					Toast.LENGTH_SHORT).show();

		}

		public void onStatusChanged(String provider, int status, Bundle extras) {

		}

	}/* End of Class MyLocationListener */

	public String getUrl(GeoPoint src, GeoPoint dest) {
//		Toast.makeText(getApplicationContext(),
//				"public String getUrl(GeoPoint src, GeoPoint dest)",
//				Toast.LENGTH_LONG).show();
		StringBuilder urlString = new StringBuilder();

		urlString.append("http://maps.google.com/maps?f=d&hl=en");
		urlString.append("&saddr=");
		urlString.append(Double.toString((double) src.getLatitudeE6() / 1.0E6));
		urlString.append(",");
		urlString
				.append(Double.toString((double) src.getLongitudeE6() / 1.0E6));
		urlString.append("&daddr=");// to
		urlString
				.append(Double.toString((double) dest.getLatitudeE6() / 1.0E6));
		urlString.append(",");
		urlString
				.append(Double.toString((double) dest.getLongitudeE6() / 1.0E6));
		urlString.append("&ie=UTF8&0&om=0&output=kml");

		return urlString.toString();
	}

	@Override
	protected void onPause() {
		super.onPause();
		wl.release();
	}

	public class MapOverlayLines extends com.google.android.maps.Overlay {

		private GeoPoint mGpt1;
		private GeoPoint mGpt2;

		protected MapOverlayLines(GeoPoint gp1, GeoPoint gp2) {
			mGpt1 = gp1;
			mGpt2 = gp2;
		}

		@Override
		public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
				long when) {
			super.draw(canvas, mapView, false);
			Paint paint;
			paint = new Paint();
			paint.setColor(Color.RED);
			paint.setAntiAlias(true);
			paint.setStyle(Style.STROKE);
			paint.setStrokeWidth(2);
			Point pt1 = new Point();
			Point pt2 = new Point();
			projection = mapView.getProjection();
			projection.toPixels(mGpt1, pt1);
			projection.toPixels(mGpt2, pt2);
			canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint);
			return true;
		}
	}
	
	public void onInit(int arg0) {
		Log.d("Hlkhjdsajlk", "oninit hij komt hier");
		speak();
	}

	public void setTextToSpeak(String text1, String text2) {
		Log.d("Hlkhjdsajlk", "setText hij komt hier");
		myText1 = text1;
		myText2 = text2;
		Intent checkIntent = new Intent();
		checkIntent.putExtra("engine",
				TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
		checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
		Log.d("Hlkhjdsajlk",
				"setText2 hij komt hier " + checkIntent.getAction());
		startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		Log.d("Hlkhjdsajlk", "onActivityresult hij komt hier");
		if (requestCode == MY_DATA_CHECK_CODE) {
			if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
				// success, create the TTS instance
				mTts = new TextToSpeech(this, this);
			} else {
				// missing data, install it
				Intent installIntent = new Intent();
				installIntent
						.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
				startActivity(installIntent);
			}
		}
	}

	public void speak() {
		Log.d("Hlkhjdsajlk", "speak hij komt hier");
		mTts.setLanguage(Locale.US);
		mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null);
		mTts.speak(myText2, TextToSpeech.QUEUE_ADD, null);
	}

	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		// TODO Auto-generated method stub
		
	}
}